home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
man
/
cat.1
/
perldebug.1
< prev
next >
Wrap
Text File
|
1995-07-25
|
11KB
|
265 lines
PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))
NNNNAAAAMMMMEEEE
perldebug - Perl debugging
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
First of all, have you tried using the ----wwww switch?
DDDDeeeebbbbuuuuggggggggiiiinnnngggg
If you invoke Perl with a ----dddd switch, your script will be run
under the debugger. However, the Perl debugger is not a
separate program as it is in a C environment. Instead, the
----dddd flag tells the compiler to insert source information into
the pseudocode it's about to hand to the interpreter. (That
means your code must compile correctly for the debugger to
work on it.) Then when the interpreter starts up, it pre-
loads a Perl library file containing the debugger itself.
The program will halt before the first executable statement
(but see below) and ask you for one of the following
commands:
h Prints out a help message.
T Stack trace. If you do bizarre things to your
@_ arguments in a subroutine, the stack
backtrace will not always show the original
values.
s Single step. Executes until it reaches the
beginning of another statement.
n Next. Executes over subroutine calls, until it
reaches the beginning of the next statement.
f Finish. Executes statements until it has
finished the current subroutine.
c Continue. Executes until the next breakpoint is
reached.
c line Continue to the specified line. Inserts a one-
time-only breakpoint at the specified line.
<CR> Repeat last n or s.
l min+incr List incr+1 lines starting at min. If min is
omitted, starts where last listing left off. If
incr is omitted, previous value of incr is used.
l min-max List lines in the indicated range.
l line List just the indicated line.
Page 1 (printed 6/30/95)
PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))
l List next window.
- List previous window.
w line List window (a few lines worth of code) around
line.
l subname List subroutine. If it's a long subroutine it
just lists the beginning. Use "l" to list more.
/pattern/ Regular expression search forward in the source
code for pattern; the final / is optional.
?pattern? Regular expression search backward in the source
code for pattern; the final ? is optional.
L List lines that have breakpoints or actions.
S Lists the names of all subroutines.
t Toggle trace mode on or off.
b line [ condition ]
Set a breakpoint. If line is omitted, sets a
breakpoint on the line that is about to be
executed. If a condition is specified, it is
evaluated each time the statement is reached and
a breakpoint is taken only if the condition is
true. Breakpoints may only be set on lines that
begin an executable statement. Conditions don't
use if:
b 237 $x > 30
b 33 /pattern/i
b subname [ condition ]
Set breakpoint at first executable line of
subroutine.
d line Delete breakpoint. If line is omitted, deletes
the breakpoint on the line that is about to be
executed.
D Delete all breakpoints.
a line command
Set an action for line. A multiline command may
be entered by backslashing the newlines. This
command is Perl code, not another debugger
command.
Page 2 (printed 6/30/95)
PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))
A Delete all line actions.
< command Set an action to happen before every debugger
prompt. A multiline command may be entered by
backslashing the newlines.
> command Set an action to happen after the prompt when
you've just given a command to return to
executing the script. A multiline command may
be entered by backslashing the newlines.
V package [symbols]
Display all (or some) variables in package
(defaulting to the main package) using a data
pretty-printer (hashes show their keys and
values so you see what's what, control
characters are made printable, etc.). Make sure
you don't put the type specifier (like $) there,
just the symbol names, like this:
V DB filename line
X [symbols] Same as as "V" command, but within the current
package.
! number Redo a debugging command. If number is omitted,
redoes the previous command.
! -number Redo the command that was that many commands
ago.
H -number Display last n commands. Only commands longer
than one character are listed. If number is
omitted, lists them all.
q or ^D Quit. ("quit" doesn't work for this.)
command Execute command as a Perl statement. A missing
semicolon will be supplied.
p expr Same as print DB::OUT expr. The DB::OUT
filehandle is opened to /dev/tty, regardless of
where STDOUT may be redirected to.
Any command you type in that isn't recognized by the
debugger will be directly executed (eval'd) as Perl code.
Leading white space will cause the debugger to think it's
NOT a debugger command.
If you have any compile-time executable statements (code
within a BEGIN block or a use statement), these will _N_O_T be
Page 3 (printed 6/30/95)
PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLDDDDEEEEBBBBUUUUGGGG((((1111))))
stopped by debugger, although requires will. From your own
code, however, you can transfer control back to the debugger
using the following statement, which is harmless if the
debugger is not running:
$DB::single = 1;
CCCCuuuussssttttoooommmmiiiizzzzaaaattttiiiioooonnnn
If you want to modify the debugger, copy _p_e_r_l_5_d_b._p_l from the
Perl library to another name and modify it as necessary.
You'll also want to set environment variable PERL5DB to say
something like this:
BEGIN { require "myperl5db.pl" }
You can do some customization by setting up a ._p_e_r_l_d_b file
which contains initialization code. For instance, you could
make aliases like these (the last one in particular most
people seem to expect to be there):
$DB::alias{'len'} = 's/^len(.*)/p length($1)/';
$DB::alias{'stop'} = 's/^stop (at|in)/b/';
$DB::alias{'.'} = 's/^\./p '
. '"\$DB::sub(\$DB::filename:\$DB::line):\t"'
. ',\$DB::dbline[\$DB::line]/' ;
OOOOtttthhhheeeerrrr rrrreeeessssoooouuuurrrrcccceeeessss
You did try the ----wwww switch, didn't you?
BBBBUUUUGGGGSSSS
If your program _e_x_i_t()s or _d_i_e()s, so does the debugger.
There's no builtin way to restart the debugger without
exiting and coming back into it. You could use an alias
like this:
$DB::alias{'rerun'} = 'exec "perl -d $DB::filename"';
But you'd lose any pending breakpoint information, and that
might not be the right path, etc.
Page 4 (printed 6/30/95)